package com.r2coding.music.api;

import com.github.pagehelper.PageInfo;
import com.r2coding.common.util.Result;
import com.r2coding.music.service.SongService;
import com.r2coding.music.vo.req.QuerySongReqVo;
import com.r2coding.music.vo.resp.SongAndSongListRespVo;
import com.r2coding.music.vo.resp.SongRespVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author:98k灬
 * @since:2022/05/05 12:33
 **/
@RestController
@RequestMapping("/api/song")
public class ApiSongController {
    @Autowired
    SongService songService;

    /**
     * 条件分页查询歌曲列表
     *
     * @param reqVo 查询条件
     * @return 统一响应体
     */
    @PostMapping("/list")
    public Result list(@RequestBody QuerySongReqVo reqVo) {
        PageInfo<SongRespVo> pageInfo = songService.getList(reqVo);
        return Result.ok(pageInfo);
    }

    /**
     * 条件分页查询已发布歌曲列表
     *
     * @param reqVo 查询条件
     * @return 统一响应体
     */
    @PostMapping("/listIsPublic")
    public Result listIsPublic(@RequestBody QuerySongReqVo reqVo) {
        reqVo.setStatus(1);
        PageInfo<SongRespVo> pageInfo = songService.getList(reqVo);
        return Result.ok(pageInfo);
    }

    /**
     * 根据id查询歌曲详情
     *
     * @param id 歌曲id
     * @return 统一响应体
     */
    @GetMapping("/getById/{id}")
    public Result getById(@PathVariable("id") Integer id) {
        SongRespVo vo = songService.getSongById(id);
        return Result.ok(vo);
    }

    /**
     * 根据分类id获取歌曲
     *
     * @param id 分类id
     * @return 统一响应体
     */
    @GetMapping("/getSongsByCategoryId/{id}")
    public Result getSongsByCategoryId(@PathVariable("id") Integer id) {
        List<SongRespVo> list = songService.getSongsByCategoryId(id);
        return Result.ok(list);
    }

    /**
     * 根据歌曲id查询歌曲信息及歌曲所在歌单的信息
     *
     * @param id 歌曲id
     * @return 统一响应体
     */
    @GetMapping("/getSongAndSongListBySongId/{id}")
    public Result getSongAndSongListBySongId(@PathVariable("id") Integer id) {
        SongAndSongListRespVo vo = songService.getSongAndSongListBySongId(id);
        return Result.ok(vo);
    }

    /**
     * 获取音乐数量
     *
     * @return 音乐数量
     */
    @GetMapping("/getSongCount")
    public Integer getSongCount() {
        return songService.count();
    }
}
